約 5,364,176 件
https://w.atwiki.jp/robocraftjpwiki/pages/123.html
Rader Receiver / レーダーレシーバー カテゴリー Special 特徴 索敵情報を集約 長所 広い通信範囲索敵情報の充実 短所 専有範囲が大きい高いCPU消費量 目次 Radar Receiverとは Radar Receiver Speclist 画像一覧表 専有範囲 Comments 更新時バージョン ver.0.13.2051 Radar Receiverとは 仲間がレーダーで感知した敵情報を、自分のマップに表示する索敵装備。 効果は、自分の範囲内の味方の『レーダーによってミニマップに映っている敵』が自分のミニマップにも反映されるようになる。 レーダーを装備している味方と共同で行動すると、受信範囲の分レーダーよりも広い範囲の索敵が可能になる。 2個以上付けても受信範囲が広くなるなんて事はないので注意。 Radar Receiver Speclist パラメータについてはパーツパラメータについてを参照してください。 希少度参考:[一般] コモン(C)→アンコモン(U)→レア(R)→エピック(E)→レジェンダリー(L) [希少] 名称 Health CPU Load 重量(Kg) 距離(m) 作成/解体Robits 希少度 Listener 24574 26 12.6 2400 1040/208 U Tracker 37234 28 15.1 2700 2800/700 R Diviner 39893 30 17.6 3000 7500/3000 E 画像一覧表 Listener Tracker Diviner
https://w.atwiki.jp/robocraft/pages/123.html
Rader Receiver / レーダーレシーバー カテゴリー Special 特徴 索敵情報を集約 長所 広い通信範囲索敵情報の充実 短所 専有範囲が大きい高いCPU消費量 目次 Radar Receiverとは Radar Receiver Speclist 画像一覧表 専有範囲 Comments 更新時バージョン 0.13.2155 ※Ver.0.13.2155で削除されました Radar Receiverとは 仲間がレーダーで感知した敵情報を、自分のマップに表示する索敵装備。 効果は、自分の範囲内の味方の『レーダーによってミニマップに映っている敵』が自分のミニマップにも反映されるようになる。 レーダーを装備している味方と共同で行動すると、受信範囲の分レーダーよりも広い範囲の索敵が可能になる。 2個以上付けても受信範囲が広くなるなんて事はないので注意。 Radar Receiver Speclist パラメータについてはパーツパラメータについてを参照してください。 希少度参考:[一般] コモン(C)→アンコモン(U)→レア(R)→エピック(E)→レジェンダリー(L) [希少] 名称 Health CPU Load 重量(Kg) 距離(m) 作成/解体Robits 希少度 Listener 24574 26 12.6 2400 1040/208 U Tracker 37234 28 15.1 2700 2800/700 R Diviner 39893 30 17.6 3000 7500/3000 E 画像一覧表 Listener Tracker Diviner
https://w.atwiki.jp/bambooflow/pages/128.html
SystemC プロセスについて SystemC プロセスについてプロセスとは プロセスの種類SC_METHOD SC_THREAD SC_CTHREAD プロセスとは プロセスはプログラムが並列動作するための機構の1つ。 シミュレーションが開始されると、プロセスとして指定された関数(プロセス関数)が実行される。 プロセス関数は1つのモジュールに複数存在することも許される。 ソフトウェアの場合、プログラムは上から順に逐次実行の動作となるが、ハードウェアの場合には並列動作となるため、ピュアなCやC++ではハードウェアを表現するには難がある。並列動作を可能賭したのがSystemCであり、プロセスはSystemCの特徴の1つとなっている。 プロセスは、Verilog-HDLでいうところのinitial文やalways文に該当する。 プロセスの種類 次の3つが存在する。 SC_METHOD SC_THREAD SC_CTHREAD それぞれマクロとなっているが、詳しい説明はしない。 SC_METHOD Verilog-HDLのalways文に似ている。 センシティビティ・リストの記述が必要。 シミュレーション中、何度でも呼び出される。 プロセス内にwait記述することはできない。 プロセス内に無限ループを構成してはならない。 このプロセスでは機能記述することは少ない。 RTL記述の表現に使用したり、信号の受渡しのタイミング調整に使う程度。 構文 void process_func(); // 戻り値はvoid、引数もvoid、もしくは記述しない SC_METHOD( process_func ); RTL組合せ回路記述例 SC_MODULE( MOD ) { sc_in sc_uint 8 in_a; sc_in sc_uint 8 in_b; sc_out sc_uint 9 out; SC_CTOR( MOD ) { SC_METHOD( adder_method ); sensitive in_a in_b; } void adder_method() { out.write( in_a.read() + in_b.read() ); } RTLのF/F回路生成 sc_in_clk Clk; sc_in bool ResetN; sc_in sc_uint 8 a; sc_in sc_uint 8 b; sc_in sc_uint 8 z; SC_CTOR( MOD ) { SC_METHOD( method0 ); sensitive Clk.pos() ResetN.neg(); } void method0() { if (!ResetN.read()) { z.write( 0 ); // リセット記述 } else { z.write( a.read() + b.read() ); } } SC_THREAD Verilog-HDLのinitial文に似ている。 シミュレーション開始時の1度だけ呼び出される。プロセスの実行が終了してしまうと再度呼ばれることはないため、通常はwhile(true){}を使って無限ループを構成してその中に機能記述する。 センシティビティ・リストの記述が可能。センシティビティ・リストはなくてもよい。 このプロセスを使用して機能記述することが多い。 3つのプロセスの中で、もっともアルゴリズムを記述するのに敵している。 構文 void process_func(); // 戻り値はvoid、引数もvoid、もしくは記述しない SC_THREAD( process_func ); 記述例 SC_CTOR( ) { SC_THREAD( main_thread ); } void main_thread() { while (true) { // ここに機能を記述 wait( event ); } } SC_CTHREAD SC_THREADに似ているが、クロック動作の記述専用のTHREADである。 センシティビティ・リストは持たない。 wait記述はクロック・イベントを待つ動作となる。 reset_signal_isによりリセット動作が記述可能。 SC_THREADに比べてシミュレーション速度が遅くなる。 構文 sc_in_clk CLK; // クロック信号(sc_clockとつなぐ) void process_func(); // 戻り値はvoid、引数もvoid、もしくは記述しない SC_CTHREAD( process_func, clk.pos() ); 記述例 sc_in_clk CLK; sc_in bool RESET_N; SC_CTOR( ) { SC_CTHREAD( main_thread, CLK.pos() ); reset_signal_is( RESET_N, false ); } void main_thread() { // ここにリセット動作を書く wait(); while (true) { // ここに機能を記述 wait(); } }
https://w.atwiki.jp/bambooflow/pages/116.html
SystemCのエラボレーション・フェーズ SystemCのエラボレーション・フェーズ説明 実験 説明 エラボレーション・フェーズは、シミュレーション開始前のフェーズ。 ここでは、つぎの作業をしている データ構造の初期化 接続関係の構築もし、sc_in 、sc_out 等が接続されていない場合エラーを出力する 次の実行フェーズの前処理(end_of_elaboration) SystemCでは3つのフェーズが存在する。 エラボレーション・フェーズ 実行フェーズ クリーンアップ・フェーズ sc_start()が実行されると、まずエラボレーション・フェーズにはいる。 シミュレーションは実行フェーズである。 sc_start()から抜けるとクリーンアップ・フェーズにはいる。 sc_moduleには、次の4つのvirtual関数が存在する。 before_end_of_elaboration end_of_elaboration start_of_simulation end_of_simulation どのような順番で呼ばれるのか気になったので実験してみた。 実験 main.cpp #include systemc.h #include "mod.h" int sc_main( int argc, char* argv[] ) { MOD *mod; printf("main begin\n"); mod = new MOD( "mod" ); printf( "main exec sc_start\n" ); sc_start( -1 ); printf( "main end\n" ); return 0; } MOD.h #ifndef __MOD_H #define __MOD_H #include systemc.h SC_MODULE( MOD ) { SC_CTOR( MOD ) { printf( "mod constructor\n" ); SC_THREAD( thread_proc ); } ~MOD() { printf( "mod destructor\n" ); } void thread_proc() { printf( "mod exec sc_stop\n" ); sc_stop(); } void before_end_of_elaboration() { printf( "mod before_end_of_elaboration\n" ); } void end_of_elaboration() { printf( "mod end_of_elaboration\n" ); } void start_of_simulation() { printf( "mod start_of_simulation\n" ); } void end_of_simulation() { printf( "mod end_of_simulation\n" ); } }; #endif /* __MOD_H */ 実行結果 main begin mod consructor main exec sc_start mod before_end_of_elaboration mod end_of_elaboration mod start_of_simulation mod exec sc_stop SystemC simulation stopped by user. mod end_of_simulation main end sc_startが実行されると before_end_of_elaboration() エラボレーション実行 end_of_elaboration() start_of_simulation() シミュレーション開始 という順番で関数が呼ばれる。 sc_stopが実行されると end_of_simulation が実行され、sc_start()内の無限ループから抜けてsc_mainへ戻る。
https://w.atwiki.jp/jpops/pages/10627.html
CHANNELをお気に入りに追加 CHANNELのリンク #bf Amazon.co.jp ウィジェット CHANNELの報道 DAM CHANNEL 配信開始!...|ニュース|乃木坂46公式サイト - 乃木坂46 【速報】キズナアイの「A.I.Channel」登録者数が300万人を突破 - PANORA Jewelry出身キム・ウンジョン&Devine Channel イム・グァンウク、真剣交際を認める…同じプロデュースチームで活動中(Kstyle) - Yahoo!ニュース - Yahoo!ニュース 〈オンライン限定・数量限定〉Channel Classics レーベル CD&SACDハイブリッド盤厳選セール〈74タイトル〉 - TOWER RECORDS ONLINE - TOWER RECORDS ONLINE YouTubeトレンド分析ツール「Channel Tracker」リリースから3ヵ月で利用者数1,200人を突破しました - PR TIMES プリッとChannel メンバー対談:Sasuke×パンダ 芸人時代の先輩後輩がYouTubeで共演するまで(リアルサウンド) - Yahoo!ニュース - Yahoo!ニュース 『YOSHIKI CHANNEL』バースデースペシャル 11月20日生放送 急遽決定!著名人からの豪華お祝いメッセージが続々登場 音楽ジャーナリストたちによる生取材も決定 - PR TIMES テレビ東京 新卒採用2023:テレビ東京 - テレビ東京 【11/15 C Channel × BitStar 共催ウェビナー】女性向けマーケティングにおけるInstagram・YouTube活用方法の最新トレンドを解説 - PR TIMES 九州経済産業局 九州あおいチャンネル - 経済産業省 永野CHANNELの音楽ネタが映画化、山形国際ムービーフェスティバルで特別上映(お笑いナタリー) - Yahoo!ニュース - Yahoo!ニュース 「ロフト サステナブルビューティー」ステージゲストに、C CHANNEL編集長まつざきみお が登壇決定! - PR TIMES 2021年7~9月期YouTubeチャンネル総再生数ランキング発表 ヒカキンを抜いてトップに躍り出たのは……?(リアルサウンド) - Yahoo!ニュース - Yahoo!ニュース C CHANNEL、リブランディングに伴い「LGBTQ」や「フェムテック」に関するコンテンツ配信を本格的にスタート - PR TIMES STAR CHANNEL MOVIES『アウシュヴィッツ・レポート』『ホロコーストの罪人』早くも「BS10 スターチャンネル」にて 超最速独占プレミア放送 決定! - PR TIMES セガ・アトラスTGS2021 Online特設サイトが更新!SEGA ATLUS CHANNELのタイムテーブルも公開! - funglr Games 【10月7日開催 C Channel×フルスピード共催セミナー】美容業界向け・Instagramでの上手なUGCの活用方法とは? - PR TIMES 美容動画クリエイター水越みさと、KOBE LETTUCEとのコラボ服発売決定! - PR TIMES 「TOKYO ENGLISH CHANNEL」開設|東京都 - 東京都 C Channelと共同でライフスタイル系インフルエンサー支援・育成プロジェクト「OC Beauty」を始動 ~YouTubeチャンネル開設支援やマネジメント等で活動を全面バックアップ ~ - PR TIMES All-in-one接客チャットの「チャネルトーク」が28億円のシリーズC資金調達を実施 - PR TIMES C Channel森川氏ウェビナーに当社代表・福田が登壇。インフルエンサーマーケティング最前線企業として、インフルエンサーとブランドの関係構築について語る! - PR TIMES 「DAM CHANNEL演歌」城之内早苗さんが5代目MCに就任通信カラオケDAMで10月5日よりスタート - PR TIMES カメラ・写真愛好家のためYouTubeチャンネル「デジカメ Watch Channel」がスタート - デジカメ Watch Mirai CHANNEL on LIVE vol2 『ロミオとジュリエット!』 - カンフェティ 【Lemon Square、無料ウェビナーを開催】各業界のプロフェッショナルが語る!販路拡大のためのマーケティング戦略~Twitter・Instagram・インサイドセールス編~ - PR TIMES 稼ぐYouTubeクリエイターにはワケがある!ラファエル監修!人気YouTuberになるためのYouTubeトレンド分析ツール「Channel Tracker」 - PR TIMES BE FIRST Official - J-WAVE NEWS 8月11日配信『YOSHIKI CHANNEL』は豪華3本立て!YOSHIKI × ハラミちゃん 対談 & V系バンド オンライン座談会2021第二弾が決定 - PR TIMES 「動画といえばC CHANNEL」から次のフェーズへ ローンチから6年でのリブランディングを取材 - MarkeZine YouTube新チャンネル「NeTuber Channel」、7月27日より配信スタート! - PR TIMES ニコニコチャンネル「Novelbright CHANNEL」と朝日放送テレビによる新感覚音楽ライブ番組『ON THE STREET』第2回ライブMCはアインシュタイン! ゲストアーティストも3組決定! - PR TIMES 登山専門チャンネル誕生! YouTubeに「山と溪谷Channel」が開設【山と溪谷社からのご案内】 / Yamakei Online - 株式会社 山と溪谷社 サブチャンネルでスポーツ中継などを見る方法は? - nhk.or.jp セールスフォース、「Channel Incentive Management」を日本市場で提供開始 - マイナビニュース ARアプリ「XR CHANNEL」にて、PEANUTSとau 5Gとのコラボ企画、「5Gエリアに出現!ARスヌーピーに会いに行こう」を開催 - PR TIMES 街の奥行きを認識するARアプリ「XR CHANNEL」と「DinoScience 恐竜科学博」のコラボーレーションにより、横浜・みなとみらいに巨大な恐竜が出現 - PR TIMES 現役大学生YouTuberりゅうが、チャンネル登録者数15万人突破を記念して物販&オンラインサイン会&オンライントーク会を開催 - PR TIMES 視聴者参加型のグッズ開発をオンラインライブで配信する「MonoLabo Channel」を開設 - PR TIMES 企業のECサイトをサポート、SNS広告で成果が出る動画クリエイタープラットフォーム「Lemon Create(レモンクリエイト)」をスタート - PR TIMES 【メディア企業徹底考察 #5】赤字が続くC Channel、インフルエンサープラットフォームで大逆転できるか - Media Innovation MARKSTYLER 公式通販サイト「RUNWAYchannel」で藤田ニコルさんの新ブランド「CALNAMUR」の取り扱い開始 - アットプレス(プレスリリース) ショップチャンネルとC Channelが業務提携 ライブ動画で商品を販売するショッピングライブ事業をスタート - PR TIMES BUZZMAFF ばずまふ(農林水産省) - tbs.co.jp アニメハック公式チャンネル - アニメハック TOKYO CREATIVE SALON GINZA ”GINZA CHANNEL” 開催。ファッションの力で銀座を元気に! - PR TIMES NVIDIAが開発者向け「Jetson Channel」日本語版をYouTubeで配信開始 - ロボスタ 「DAM CHANNEL」18代目MCにモデル・貴島明日香さんが就任 通信カラオケDAMで4月11日よりスタート - PR TIMES 【ライブレポート】SIRUP、チャンネルが合う仲間と集った企画ライブ「channel 02」で魅せた音と映像の祭典 - ナタリー テレビ大阪ニュース - tv-osaka.co.jp w-inds.橘慶太さんのゲームチャンネル番組「KT GAME CHANNEL」がOPENRECで配信決定!初回は3月19日(金) 20 00より配信開始! - PR TIMES 日経テレ東大学 - テレビ東京 『C CHANNEL』、ユーザー・インフルエンサー編集部がリアルに選んだ“ベストコスメ 2020年下半期”の大賞コスメ発表 - PR TIMES C CHANNEL、ユーザー・インフルエンサー・編集部がリアルに選んだ“ベストコスメ 2020年 下半期”の発表決定 - PR TIMES KATEが、YouTubeチャンネルを開設!「KATE CHANNEL」 10月23日(金)より公開中プロによるメイクアドバイスからCMの舞台裏まで魅力のコンテンツをお届け! - PR TIMES C Channel、新しい働き方を目指しオフィスを移転 - PR TIMES C Channelとの提携によるInstagramマーケティング支援サービスを提供開始 - PR TIMES 【iDAインフルエンサー販売員チーム】結成!iDAとC Channelが協業しファッション・ビューティー販売員を育成・派遣 - PR TIMES 『新YNN NMB48 CHANNEL』 × 『STU48 CHANNEL』2つのAKB48グループのチャンネルでコラボ生放送が決定!9月22日(火・祝)18:30~ - PR TIMES 日経とC ChannelがYouTubeチャンネルを開始…働く女性を応援 - Media Innovation 働く女性を応援するYouTubeチャンネル 「newme」を9月1日から開始 - PR TIMES C Channel、SNS配信とインフルエンサーサービスに集中 - PR TIMES C Channel、アプリサービスを9月末で終了へ--SNSでのコンテンツ配信にシフト - CNET Japan ソーシャルデータバンクの新サービス「L-Channel」 LINE公式アカウントによる引っ越し自動見積りサービス「Hi!MOVE」と連携 見積りから空き確認・申込みまでLINEですべて完結可能に - PR TIMES C Channel森川亮氏(1)50歳目前で起業、日本を元気に - 日経ビジネス電子版 チャネルトークを提供するZOYI CorporationがChannel Corporationに社名変更、および累計11.8億円の資金調達実施 - ASCII.jp C CHANNEL、F1層に向けて「スキンケア」に関するアンケートを実施 - PR TIMES driver channel - driver@web J-CAM(ジェイカム)、ZUU onlineで「月刊暗号資産」のBrand Channel(ブランドチャンネル)を開設 - PR TIMES 「C CHANNEL × Twitterスポンサーシップ広告 」メニューに 「インタラクティブ動画パッケージ」を追加 - PR TIMES 『C CHANNEL』、F1層のリアルな悩みを解決してくれるコスメを表彰する 「C CHANNEL AWARD2020上半期」を発表 - PR TIMES ALL BGM CHANNEL所属の3アーティストが、初のオリジナルアルバムを配信リリース! - PR TIMES Windows 10プレビュー版の分類が「ring」から「Channel」に変更 - PC Watch 「葉山翔太Official Channel 喫茶あまた 」がオープン!6月24日(水)チャンネルオープン記念生放送を実施 チャンネル会員限定で本人がデザインした会員証プレゼントも!! - PR TIMES 松竹チャンネル/SHOCHIKUch - シネマトゥデイ 動画視聴中に知りたい情報を取得し、そのまま購買へと繋げる動画プロモーション「TIG×C CHANNELパッケージプラン」にUGC・LIVEメニュー追加 - PR TIMES C CHANNEL、東京都公式動画チャンネル「東京動画」と共同した特設ページ “今年のGWはSTAY HOME週間”を開始 - PR TIMES 『C CHANNEL』が開設した公式TikTokアカウントのフォロワー数が100万人を突破 - PR TIMES C Channel、企業と“ファンフルエンサー”をつなぐ「Lemon Square」を提供開始 - MarkeZine 「社長を神格化してはいけない」C Channel執行役員が語る、社長との役割分担の明確化 - 株式会社ネオキャリア 株式会社 math channelのプレスリリース|PR TIMES - PR TIMES 【C CHANNELクリッパー月間MVP】2019年9月度の月間MVP発表!プチプラ高見えコーデならおまかせあれ!「Taiyou(たいよう)」さんが受賞 - PR TIMES 【C CHANNELクリッパー月間MVP】2019年6月度の月間MVP発表!上級者テクで恋愛をリード「元国際線CA Englishお姉さん 春日啓花」さんが受賞 - PR TIMES C Channel、関西オフィス開設のお知らせ - PR TIMES C CHANNELに潜入! インフルエンサーが流行る理由や撮影裏話を聞いてみた - ITをもっと身近に。ソフトバンクニュース - softbank.jp C Channelがエンタメ動画事業に進出。多彩なパートナー企業とともに『mysta』のサービスを本格開始! - PR TIMES ディズニー・チャンネル|テレビ|ディズニー公式 - Disney公式 C Channel株式会社のプレスリリース|PR TIMES - PR TIMES ABEMA 将棋チャンネル【公式】 - AbemaTIMES BOXIL CHANNEL - Beyond(ビヨンド) JO1 - よしもとニュースセンター King Gnu official YouTube channel - J-WAVE NEWS harmoeオフィシャルYouTubeチャンネル - アニメイトタイムズ かまいたちチャンネル - よしもとニュースセンター アークナイツ 公式チャンネル - 4Gamer.net クメマリchannel【そうだ、お家をつくろう】 - yaizu.lg.jp ハフライブ ハフポスト日本版公式SDGsチャンネル - ハフポスト日本版 公益社団法人 日本医師会公式チャンネル - med.or.jp 情熱大陸 公式チャンネル - 毎日放送 蒼穹のファフナー YouTube Official Channel - シネマトゥデイ CHANNELとは CHANNELの39%は夢で出来ています。CHANNELの22%は呪詛で出来ています。CHANNELの13%は怨念で出来ています。CHANNELの8%はやらしさで出来ています。CHANNELの8%は勢いで出来ています。CHANNELの5%は愛で出来ています。CHANNELの2%は見栄で出来ています。CHANNELの2%は着色料で出来ています。CHANNELの1%は汗と涙(化合物)で出来ています。 CHANNEL@ウィキペディア CHANNEL Amazon.co.jp ウィジェット 掲示板 名前(HN) カキコミ すべてのコメントを見る ページ先頭へ CHANNEL このページについて このページはCHANNELのインターネット上の情報を集めたリンク集のようなものです。ブックマークしておけば、日々更新されるCHANNELに関連する最新情報にアクセスすることができます。 情報収集はプログラムで行っているため、名前が同じであるが異なるカテゴリーの情報が掲載される場合があります。ご了承ください。 リンク先の内容を保証するものではありません。ご自身の責任でクリックしてください。
https://w.atwiki.jp/bambooflow/pages/170.html
SystemCでユーザデータタイプを使うユーザデータタイプを使うときの問題 ユーザデータタイプを使うための解決 bool operator==()はなぜ必要? テンプレートを使用したユーザデータタイプの場合 SystemCでユーザデータタイプを使う sc_signal やsc_buffer を介したデータやりとりは、既に定義されたbool,int,sc_int 等は問題なく使うことができます。 しかし、ユーザが独自に構造体を定義して、それを受渡しする場合問題が生じる。 ここでは、sc_signal もしくはsc_buffer でユーザデータタイプを使用する方法をメモします。 ユーザデータタイプを使うときの問題 次のコードを見てください。 struct StrData { bool valid; int data; }; int sc_main( int, char** ) { sc_signal StrData sig; } 上記をコンパイルしようとすると、次のようなエラーが発生します。 /usr/local/systemc-2.2.0/include/sysc/communication/sc_signal.h In member function ‘void sc_core sc_signal IF write(const T ) [with T = StrData]’ main.cpp 119 instantiated from here /usr/local/systemc-2.2.0/include/sysc/communication/sc_signal.h 221 error no match for ‘operator==’ in ‘((sc_core sc_signal StrData *)this)- sc_core sc_signal StrData m_new_val == ((sc_core sc_signal StrData *)this)- sc_core sc_signal StrData m_cur_val’ ・・・ ・・・ はじめなんじゃこりゃってなりますが、‘operator==’がどうやら足りないというメッセージのようです。 なにか工夫をしないといけないようです。 ユーザデータタイプを使うための解決 ユーザデータタイプをsc_signal<>やsc_buffer<>で使う場合は、次の3つを定義してあげます。 bool operator==() sc_trace() ostream operator () 具体的には、次のように修正します。 struct StrData { bool valid; int data; // sc_signal で使う bool operator==(const StrData other) const { return ( (valid == other.valid) (data == other.data) ); } }; // トレース時使用する void sc_trace( sc_trace_file* tf, const StrData trans, std string name ) { sc_trace( tf, trans.valid, name + ".valid" ); sc_trace( tf, trans.data, name + ".data" ); } // SystemCで使う ostream operator ( ostream os, const StrData trans ) { os "(" trans.valid ", " trans.data ")"; return os; } int sc_main( int, char** ) { sc_signal StrData sig; } 構造体1つを扱うのにこれだけ定義が増えるのはちょっと面倒臭いですが、これもSystemCの仕様なのでしかたないです。 ここで、operator==はちゃんと書かないとダメですが、sc_trace()とoperator ()の関数の中身は、ないと不便なだけで書かなくてもコンパイルできます。 面倒臭いときは、わたしは省略しちゃいます。 bool operator==()はなぜ必要? 次のコードを見てください。 SC_MODULE(MOD) { sc_in StrData din; SC_CTOR(MOD) { SC_METHOD( method ); sensitive din; // dinが変化したとき } void method() { std cout "din = " din.read() std endl; } }; メソッドであるmethod()がよばれるのは、sensitive dinよりdinが変化したときであるとわかります。 「変化した」というのをSystemCではどうやって判断しているかというと内部で"=="で比較しています。なので"=="で比較できるというのが前提でSystemCが設計されているので、ないとコンパイル時に"operator==が無い"と怒られるわけです。 SystemCデータタイプであるsc_int やsc_fixed はちゃんとoperator==が定義されているので、そんなことは気にしなくても使えます。 テンプレートを使用したユーザデータタイプの場合 次のようなテンプレートを使ったデータタイプを見てみます。 template typename DT, int N struct Payload { bool w_flag; int address; DT data[N]; }; 次のように修正します。 template typename DT, int N struct Payload { bool w_flag; int address; DT data[N]; // sc_signal で必要 template typename ODT,int ON bool operator==( const Payload ODT,ON other) const { bool ret; ret = (w_flag == other.w_flag) (address == other.address); for (int i=0; i N; i++) ret = ret (data[i] == other.data[i]); return ret; } }; // トレースで必要 template typename DT, int N void sc_trace( sc_trace_file* tf, const Payload DT,N trans, std string name ) { sc_trace( tf, trans.w_flag, name + ".w_flag" ); sc_trace( tf, trans.address, name + ".address" ); for (int i=0; i N; i++) { std ostringstream oss; oss name ".data_" i; sc_trace( tf, trans.address, oss.str() ); } } // SystemCで必要 template typename DT, int N ostream operator ( ostream os, const Payload DT,N trans ) { os "(" trans.w_flag ", " trans.address ", "; for (int i=0; i N; i++) os (int)trans.data[i] ", "; os ")"; return os; }
https://w.atwiki.jp/bambooflow/pages/111.html
SystemCの基本データタイプ SystemCの基本データタイプ基本データタイプ一覧 キャスト(データタイプの変換) 変換一覧(to_xxx)to_stringの使い方 coutで表示させたい場合 printfで表示させたい場合 sc_stringがない? SystemCでは、標準C++のデータ型に加えて以下のようなデータ型が扱える。 基本データタイプ一覧 データタイプ 符号 説明 使用例 sc_int<W> 付 Wビット整数 sc_int 16 a = -123; sc_uint<W> 無 sc_uint 32 addr = 0xdeadbeaf; sc_bigint<W> 付 Wが64ビット以上の整数 sc_biguint<W> 無 sc_bit - 0 , 1 の2値 sc_bit b = 1 ; sc_logic - 0 , 1 , x , z の4値 sc_bit l = x ; sc_bv<W> - sc_bitのWビットベクタ sc_bv 8 bv = "10110110"; sc_lv<W> - sc_logicのWビットベクタ sc_lv 8 lv = "xxxx1010"; sc_fixed<NW, NI> 付 固定小数点NW=全サイズ、NI=整数サイズ sc_fixed 8,4 f = -1.25; sc_ufixed<NW, NI> 無 sc_ufixed 8,4 f = 1.5; 他にもあるが、基本はこんなもの。 C++では、8、16、32、64といったサイズしか扱うことはできない。 SystemCではハードウェアを意識した記述も書けるようにビットサイズが可変であるデータ型が準備されている。 また、sc_logic、sc_lv といった4値を扱うことができるデータ型もある。ただし4値を扱うとシミュレーション速度は低速になる。 SystemCの主な利用価値は、ソフトウェアとの強調検証となっている。そのため、速度が低下する4値は扱うことはほとんどない。 高位合成でも、4値は使用せずにsc_int 、sc_uint がほとんどになる。 sc_fixed ,sc_fixed の高速版であるsc_fixed_fast ,sc_ufixed_fast もある。 キャスト(データタイプの変換) sc_uint 16 x; sc_int 32 y; y = (sc_uint 32 )x; // C++のキャストと同じ 変換一覧(to_xxx) 基本データタイプに共通。 戻り値 関数 int to_int() unsigned int to_uint() long to_long() unsigned long to_ulong() int64 to_int64() uint64 to_uint64() double to_double() const std string to_string() to_stringの使い方 書式 const std string to_string (sc_numrep numrep) const sc_numrep列挙 説明 例(sc_int 8 100) 例(sc_int 8 -100) SC_NOBASE = 0 そのまま "100" "-100" SC_BIN = 2 2進数 "0b01100100" "0b10011100" SC_OCT = 8 8進数 "0o144" "0o634" SC_DEC = 10 10進数 "100" "-100" SC_HEX = 16 16進数 "0x64" "0x9c" SC_BIN_US 2進数(2の補数) "0bus1100100" "negative" SC_BIN_SM 符号付2進数 "0bsm01100100" "-0bsm01100100" SC_OCT_US 8進数(2の補数) "0ous144" "negative" SC_OCT_SM 符号付8進数 "0osm144" "-0osm144" SC_HEX_US 16進数(2の補数) "0xus64" "negative" SC_HEX_SM 符号付16進数 "0xsm64" "-0xsm64" SC_CSD 正規化符号付数字 "0csd10-00100" "0csd-0100-00" coutで表示させたい場合 2進数で代入したい場合。 普通Cでは、2進数は表示できないがSystemCならば表示できたりする。 sc_int 8 data = "0b01010011"; cout "data = " data.to_string(SC_HEX) endl; "0b"の後に"0"を付けると正数、"1"を付けると負数となる。 sc_int 8 data = 100; cout data endl; // 通常表示 cout data.to_string( SC_HEX ) endl; // 16進数 printfで表示させたい場合 SystemCのデータ型を表示するときの方法。 sc_int 32 data; printf( "data = %d\n", (int)data ); // キャスト printf( "data = %d\n", data.to_int() ); // int型に変換 次の方法はダメ。 printf( "data = %d\n", data ); // セグメンテーションエラー 以下のような警告が出る。 test.cpp function 内の `int sc_main(int, char**) test.cpp 9 警告 cannot pass objects of non-POD type `class sc_dt sc_int 32 through `... ; call will abort at runtime ただし、コンパイルは通る。 通るが、実行すると"セグメンテーションエラー"となる。 sc_stringがない? SystemCのバージョン2.2ではsc_stringがなくなっている。 とりあえず、以下のようにすればよいかも。 typedef sc_string std string;
https://w.atwiki.jp/bambooflow/pages/166.html
SystemCのレポート処理 SystemCのレポート処理レポート使いかた1ー簡単な例 レポート使いかた2ー練習用すべてのメッセージを画面出力させたくないとき リファレンスsc_report_handlersc_actions sc_report メッセージの分類(レベル)一覧 メッセージ動作一覧デフォルトの動作 メッセージ表示用マクロ その他 SystemCのV2.1からレポート出力処理を簡単に制御するためのエラーレポートシステムが標準化されています。 エラーメッセージやトラッキングレポートなど発生元の特定し、デバッグを容易にすることは不可欠です。 メッセージには、Information、Warning、Error、Fatalの4つの種類があるようです。 この4つのメッセージについて出力方法を指定したり、動作を指定したりすることができます。 画面出力やログ出力を簡単に切り替えることができます。 簡単にメモ書きを残します。 レポート使いかた1ー簡単な例 以下に簡単な例を紹介。 サンプル #include systemc.h const char* sim_name = "test"; // メッセージID名 int sc_main( int argc, char* argv[] ) { sc_report_handler set_log_file_name("sample_run.log"); // ログファイル設定 sc_report_handler stop_after( SC_ERROR, 100 ); // シミュレーション終了指定 sc_report_handler set_actions( sim_name, SC_INFO, SC_DISPLAY | SC_LOG ); // 動作指定 SC_REPORT_INFO( sim_name, "sample report1" ); sc_start( 100, SC_NS ); SC_REPORT_INFO( sim_name, "sample report2" ); return 0; } set_log_file_nameはメッセージを出力するレポートファイル名を指定します。 どこで、そのメッセージが出力されているかのグループ分けのために使用します。 とりあえずはファイル名やモジュール名等を指定するとよいかもしれません。 stop_afterはレポート情報の回数からシミュレーションを停止するタイミングを指定することができます。stop_after( SC_ERROR, 100 )は「ERROR(エラー)」レベルのメッセージの数(SC_REPORT_ERRORの実行回数)が100回となったらシミュレーションを停止させます。ゼロに設定するとdisableです。 今回のサンプルでは意味ないです。 set_actionsはメッセージ処理に対する動作を設定することができます。et_actions( sim_name, SC_INFO, SC_DISPLAY | SC_LOG )は、「INFO(情報)」レベルのメッセージを画面出力とファイル出力に設定しています。 画面表示 Info test sample report1 Info test sample report2 標準出力(std cout)にレポートを出力するにはset_actionsでSC_DISPLAYを設定します。 レポートファイル出力(sample_run.log) 0 s Info test sample report2 100 ns Info test sample report2 ファイルに出力するには、set_log_file_nameにて出力ファイル名を設定して、かつ、set_actionsにてSC_LOGを設定します。 ファイルへの出力には経過時間も記録されるみたいです。 デフォルトの動作はすべてのメッセージレベルはログ出力となっているので、ログファイル指定するだけで出力されるはずです。 レポート使いかた2ー練習用 いろいろ試してみました。 以下にサンプルコードを載せます。実際に使うときはもっときれいに書きたいものです。 このサンプルは、レポート処理の動作を見るために作ったものです。 モジュールはMOD1とMOD2があります。 モジュールはそれぞれスレッドを持っていて、定期的にメッセージを出力させています。 メッセージの制御は、sc_mainで行います。 はじめの状態は、単にデフォルト設定のままで、ログファイル("sample_run.log")出力するだけです。 コメントアウトされているsc_actionsやsc_stop_afterを有効にすることでメッセージ制御が行えます。 サンプルコード(sample_report02.cpp) #include systemc.h const char* id_name1 = "ID_1"; const char* id_name2 = "ID_2"; SC_MODULE( MOD1 ) { SC_CTOR( MOD1 ) { SC_THREAD( thread ); } void thread() { int cnt = 0; while (true) { ++cnt; wait( 10, SC_NS ); if (cnt%80==0) SC_REPORT_FATAL( id_name1, "sample Fatal1" ); else if (cnt%50==0) SC_REPORT_ERROR( id_name1, "sample Error1" ); else if (cnt%30==0) SC_REPORT_WARNING( id_name1, "sample Warning1" ); else if (cnt%10==0) SC_REPORT_INFO( id_name1, "sample Info1" ); } } }; SC_MODULE( MOD2 ) { SC_CTOR( MOD2 ) { SC_THREAD( thread ); } void thread() { int cnt = 0; while (true) { ++cnt; wait( 15, SC_NS ); if (cnt%100==0) SC_REPORT_FATAL( id_name2, "sample Fatal1" ); else if (cnt%70==0) SC_REPORT_ERROR( id_name2, "sample Error1" ); else if (cnt%40==0) SC_REPORT_WARNING( id_name2, "sample Warning1" ); else if (cnt%20==0) SC_REPORT_INFO( id_name2, "sample Info1" ); } } }; int sc_main( int argc, char* argv[] ) { MOD1 mod1("mod1"); MOD2 mod2("mod2"); // 以下、メッセージの制御 sc_report_handler set_log_file_name("sample_run.log"); //sc_report_handler set_actions( SC_ERROR, SC_DISPLAY | SC_LOG | SC_CACHE_REPORT ); //sc_report_handler set_actions( SC_FATAL, SC_DISPLAY | SC_LOG | SC_CACHE_REPORT ); //sc_report_handler suppress( SC_THROW ); //sc_report_handler stop_after( SC_FATAL, 10 ); //sc_report_handler set_actions( SC_INFO, SC_DISPLAY | SC_LOG ); //sc_report_handler stop_after( SC_FATAL, 10 ); //sc_report_handler stop_after( SC_ERROR, 10 ); //sc_report_handler set_actions( id_name1, SC_WARNING, SC_LOG | SC_CACHE_REPORT ); // シミュレーション実行 sc_start( 1., SC_MS ); // シミュレーション終了後の処理 cout endl; cout " ****** end-time = " sc_time_stamp() " ******" endl; cout endl; sc_report *rp = sc_report_handler get_cached_report(); if (rp) { cout "--- Cache Messgage ---" endl; cout rp- get_msg() endl; cout "--- Cache Messgage end ---" endl; } cout endl; cout "--- " id_name1 " ---" endl; cout " Info count = " sc_report_handler get_count( id_name1, SC_INFO ) endl; cout " Warning count = " sc_report_handler get_count( id_name1, SC_WARNING ) endl; cout " Error count = " sc_report_handler get_count( id_name1, SC_ERROR ) endl; cout " Fatal count = " sc_report_handler get_count( id_name1, SC_FATAL ) endl; cout "--- " id_name2 " ---" endl; cout " Info count = " sc_report_handler get_count( id_name2, SC_INFO ) endl; cout " Warning count = " sc_report_handler get_count( id_name2, SC_WARNING ) endl; cout " Error count = " sc_report_handler get_count( id_name2, SC_ERROR ) endl; cout " Fatal count = " sc_report_handler get_count( id_name2, SC_FATAL ) endl; cout "--- TOTAL ---" endl; cout " Info count = " sc_report_handler get_count( SC_INFO ) endl; cout " Warning count = " sc_report_handler get_count( SC_WARNING ) endl; cout " Error count = " sc_report_handler get_count( SC_ERROR ) endl; cout " Fatal count = " sc_report_handler get_count( SC_FATAL ) endl; return 0; } 画面出力例 ・・・ Error ID_1 sample Error1 In file report_sample02.cpp 15 In process mod1.thread @ 500 ns ****** end-time = 500 ns ****** --- Cache Messgage --- sample Error1 --- Cache Messgage end --- --- ID_1 --- Info count = 3 Warning count = 1 Error count = 1 Fatal count = 0 --- ID_2 --- Info count = 1 Warning count = 0 Error count = 0 Fatal count = 0 --- TOTAL --- Info count = 4 Warning count = 1 Error count = 1 Fatal count = 0 デフォルトのレポートの動作では、エラーメッセージが表示されると、throwへとばされて、シミュレーションが終了してしまいます。 通常ならば、エラーが出力された時点でシミュレーションが止まっても問題ないと思いますが、継続して実行したい場合もあります。 その時は、以下のような設定をします。 sc_report_handler set_actions( SC_ERROR, SC_DISPLAY | SC_LOG | SC_CACHE_REPORT ); // SC_THROWをはずす SC_ERRORの動作をデフォルト設定から上書きします。 ためしに設定を有効にして実行してみます。 実行結果 ・・・ Fatal ID_1 sample Fatal1 In file report_sample02.cpp 15 In process mod1.thread @ 800 ns アボートしました 今度は、Fatalメッセージが出力されると同時に、アボートしてしまいました。 これは、Fatalのデフォルト設定にSC_ABORTが設定されているためです。 先ほどのERROR同様に、SC_ABORTをはずして設定を上書きすれば止まらなくなります。 sc_report_handler set_actions( SC_ERROR, SC_DISPLAY | SC_LOG | SC_CACHE_REPORT ); // SC_ABORTをはずす 設定して、実行するとシミュレーションは1ms(sc_startに設定した時間)経過して止まると思います。 今度は、FATALメッセージが10回表示されたら、シミュレーションを終了するようにします。 設定は以下を追加します。 sc_report_handler stop_after( SC_FATAL, 10 ); 設定して実行すると、TOTALのFatal count値が10でシミュレーションが終了すると思います。 stop_afterは、IDを指定することもできます。 sc_report_handler stop_after( id_name2, SC_FATAL, 10 ); // id_name2="ID_2" 上記の設定にして実行すると、ID_2のFATALメッセージが10回表示された時点でシミュレーションが終了すると思います。 すべてのメッセージを画面出力させたくないとき すべてのメッセージを画面出力させたくないときは、以下を設定します。 sc_report_handler suppress( SC_DISPLAY ); 解除するときは、suppress()を実行すればよいようです。 逆に強制的に画面出力させるときは、force( SC_DISPLAY )とすればよいようです。 リファレンス sc_report_handler 次を参照してください。 sc_report_handler sc_actions メッセージに対して動作を指定することができます。 static sc_actions set_actions( sc_severity, sc_actions = SC_UNSPECIFIED ); メッセージレベルごとに動作を指定します。 static sc_actions set_actions( const char* msg_type, sc_actions = SC_UNSPECIFIED ); IDごとに動作を指定します。 static sc_actions set_actions( const char* msg_type, sc_severity, sc_actions = SC_UNSPECIFIED ); メッセージレベルとIDごとに動作を指定します。 sc_report 次を参照してください。 sc_report メッセージの分類(レベル)一覧 メッセージには以下のような種類があります。 sc_severity SC_INFO 情報出力 SC_WARNING 警告、問題かもしれないことを知らせる SC_ERROR 重大な問題 SC_FATAL 致命的な問題、デフォルトではシミュレーションを終了 メッセージ動作一覧 メッセージのレベルごとに動作を指定することができます。 enum SC_UNSPECIFIED SC_DO_NOTHING 何もしない SC_THROW レポートとの内容に対応するC++の例外を発生。 SC_LOG レポートをログに出力する。通常はディスク上のファイルへ出力。 SC_DISPLAY レポートを画面出。 SC_INTERRUPT シミュレーションを一時停止。sc_interrupt_hereをよぶ。 SC_CACHE_REPORT レポートのコピーを保存。get_cached_repot()より後に取得できる。 SC_STOP sc_stop()をよぶ。 SC_ABORT sc_abort()をよぶ。 デフォルトの動作 デフォルトの動作は次のように設定されているようです。 SC_DEFAULT_INFO_ACTIONS (SC_LOG | SC_DISPLAY) SC_DEFAULT_WARNING_ACTIONS (SC_LOG | SC_DISPLAY) SC_DEFAULT_ERROR_ACTIONS (SC_LOG | SC_CACHE_REPORT | SC_THROW) SC_DEFAULT_FATAL_ACTIONS (SC_LOG | SC_DISPLAY | SC_CACHE_REPORT | SC_ABORT) 全てのメッセージは(ログファイル名が設定されていれば)ファイル出力します。 FATAL時、シミュレーションはアボートします。 メッセージ表示用マクロ SC_REPORT_INFO(id,msg) 情報メッセージに使用 SC_REPORT_WARNING(id,msg) ワーニングメッセージに使用 SC_REPORT_ERROR(id,msg) エラーメッセージに使用 SC_REPORT_FATAL(id,msg) 致命的エラーメッセージに使用 sc_assert(expr) アサート、assertのかわりに使用 sc_assertは以下のようにdefine定義されています。 #define sc_assert(expr) \ ((void) ((expr) ? 0 (SC_REPORT_FATAL( SC_ID_ASSERTION_FAILED_ , #expr ), 0))) その他 SystemCのログファイルからVCDファイルを生成するツールを作ってみました。 てきとうなので、うまくうごかなかったらごめんなさい。 sysclog2vcd.pl 使いかた % ./sysclog2vcd.pl ログファイル名 % gtkwave sysclog.vcd 以上
https://w.atwiki.jp/pjkyt/pages/13.html
What s this? Questions? What s the point? It eliminates the discovery-and-pairing from Bluetooth. Basically it solves the save problem as what is address by Bump. I just thought it sits naturally in mind that you take picture of something and its data is stored in the local memory. How does it work? 1. The sender side specifies the file to send. Then the manhole symbol encoding sender s Bluetooth address appears on the screen. The server starts a server and waits for the receiver to connect. 2. The receiver side captures this symbol and demodulates the address. With this address, it connects to sender s server. 3. Once connected, the file is transferred over the Bluetooth connection. Did you write this program? Yes, the application layer is entirely our own code. For the Bluetooth API, we ve gratefully took benefit of Bluecove and Backport Android Bluetooth. What are you cheating? A few things. First, the current Android s Bluetooth API doesn t allow RFCOMM channel be created without pairing. So in this demo video, the PC and mobiles are already paired. That really defeats the purpose of using Manhole transceiver! Another thing that might count near-cheating is the lighting condition. You can see the room is somewhat dark in this video. This was mainly for my digital camera to make nicer picture. But it also means easier condition for the image processing. Anyway, it has been working okay with the room light. iPhone is cooler I know. And T was going to do the iPhone version too (he has purchased the developer program). But the thing is iPhone doesn t really allow SPP connection to span with a device other than iPhone. We gave up. How about Symbian? Good point. Symbian users should actually be the ones who benefit from this kind of technology. iPhone and Android users are typically subscribing a flat-rate data plan, which opens the options for other cool solutions like dropbox. And Android users are typically more technology oriented that they can handle the Bluetooth discovery-and-paring (though it is a pain). I did have developed the Symbian version. In fact, I had made the Symbian version in prior to the Android version. It works but have certain disadvantages. Most of the Symbian phones out there don t support the API necessary for accessing camera auto-focusing; it is the same API that allows me to turn off the flash so that I can avoid the glare on target screen. And what is more demotivating is the security policy it has. To overcome, I must rewrite the program with Symbian C++ and purchase the certificate, which costs several hundred bucks a year. Oh my Budda, I gave up. Why not QR code? By now, you ve probably realized we were planning to make this technology available across many more platforms (but couldn t). So we ve need the modulating symbol to be available in all platform. Writing a QR code codec is one solution. It s tempting but a hassle. Besides, we ve just needed to transfer 7 bytes containing the Bluetooth address and service channel. So we ve decided to make our own scheme. At least I think our symbol looks more psychedelic and hip! てす -- (K) 2010-06-26 14 55 08 名前 コメント すべてのコメントを見る
https://w.atwiki.jp/bambooflow/pages/66.html
リセット動作 SystemC v2.1では、リセット動作を記述できるプロセスは、SC_METHODとSC_CTHREADだけ。 SC_THREADでのリセット動作の実現はやってやれないこともないと思うが、現状難しいと思う。 でも、のちのちのヴァージョンではSC_CTHREADは廃止されてSC_THREADでリセット動作も可能になるかも。 SC_METHODでのリセット動作 カウンタ クロック数をカウントする。 入力はクロック信号、リセット信号で、出力はカウンタ数である。 入力reset_xがfalseのとき、内部カウンタctrは0にクリアされる。 入力reset_xがtrueのとき、内部カウンタはクロックの立ち上がりでインクリメントされる。 #include systemc.h SC_MODULE(COUNTER) { sc_in_clk clk; sc_in bool reset_x; sc_out int ctr; void process() { if (!reset_x) { ctr = 0; } else { ctr++; } } SC_CTOR(COUNTER) { SC_METHOD(process); sensitive clk.pos(); } };